import 'package:enjoy_plus_three/utils/http.dart';
import 'package:enjoy_plus_three/utils/logger.dart';
import 'package:enjoy_plus_three/utils/toast.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';


class LocationList extends StatefulWidget {
  const LocationList({super.key});

  @override
  State<LocationList> createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {
  List nearbyCommunities = [];
  String address = '';
  String baseUrl = 'https://restapi.amap.com/v3';
  String key ='deb4c4108162c7ea9aa2f3f210925e7a';

  //获取地理位置
  Future<void>  requestLocationPermission() async {
    PermissionStatus status = await Permission.location.request();
    if (status.isGranted){
      ToastUtil.showSuccess('获取地理位置权限成功');
      getLocation();
    }else{
      ToastUtil.showError('获取地理位置权限失败');
    }
  }

  //获取经纬度信息
  Future<void>  getLocation() async {
    late LocationSettings locationSettings;

  if (defaultTargetPlatform == TargetPlatform.android) {
    // 针对Android平台，设置高精度定位、100米距离过滤、强制使用位置管理器等
    locationSettings = AndroidSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
        forceLocationManager: true,
        intervalDuration: const Duration(seconds: 10),
        foregroundNotificationConfig: const ForegroundNotificationConfig(
          notificationText: "Example app will continue to receive your location even when you aren't using it",
          notificationTitle: "Running in Background",
          enableWakeLock: true,
        ));
  } else if (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS) {
    // 针对iOS和macOS平台，设置高精度定位、健身活动类型、100米距离过滤等
    locationSettings = AppleSettings(
      accuracy: LocationAccuracy.high,
      activityType: ActivityType.fitness,
      distanceFilter: 100,
      pauseLocationUpdatesAutomatically: true,
      // 只有在应用在后台启动时才设置为true
      showBackgroundLocationIndicator: false,
    );
  } else if (kIsWeb) {
    // 针对Web环境，设置高精度定位、100米距离过滤、5分钟的最大年龄等
    locationSettings = WebSettings(
      accuracy: LocationAccuracy.high,
      distanceFilter: 100,
      maximumAge: const Duration(minutes: 5),
    );
  } else {
    // 对于其他平台，默认设置高精度定位和100米距离过滤
    locationSettings = const LocationSettings(
      accuracy: LocationAccuracy.high,
      distanceFilter: 100,
    );
  }

  try {
    // 使用配置好的定位设置获取当前位置
    Position position = await Geolocator.getCurrentPosition(locationSettings: locationSettings);
    // 显示成功获取到的纬度和经度
    ToastUtil.showSuccess('${position.latitude}, ${position.longitude}');
    // 121.508176 , 121.508176

  } catch (e) {
    // 处理可能出现的异常
    ToastUtil.showError('获取地理位置失败');
  }

  }

  //逆地理编码
  Future<void> reverseGeocoding(double longitude, double latitude) async {
    // 拼接路径
    String url =
        '$baseUrl/geocode/regeo?location=$longitude,$latitude&key=$key';
    try {
      final res = await http.get(url);
      setState(() {
        address = res['regeocode']['formatted_address'];
      });
    } catch (e) {
      ToastUtil.showError('地址解析失败');
    }
  }

  //获取附近社区的信息
  Future<void> getNearbyCommunity(double latitude, double longitude) async {
    //获取附近社区信息
    String url =
      '$baseUrl/place/around?key=$key&location=$longitude,$latitude&radius=500&types=住宅小区';
    try {
      var response = await http.get(url);
      for (var element in (response['pois'] as List)) {
        logger.i(element['name']);
        setState(() {
          nearbyCommunities.add(element);
        });
      }
    } catch (e) {
      print('查询过程中出现错误: $e');
    } 
  }


  @override
  void initState() {
    //获取到经纬度后向高德地图发送请求
    //121.521763,31.234034
    reverseGeocoding(121.521763,31.234034); 
    //获取附近街区
    getNearbyCommunity(121.521763,31.234034);
    requestLocationPermission();
    super.initState();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('选择社区'),
        ),
        body: ListView(
          padding: const EdgeInsets.all(10),
          children: [
            const Row(
              children: [
                Text(
                  '当前地址',
                  style: TextStyle(color: Colors.grey),
                )
              ],
            ),
            const SizedBox(height: 10),
            Container(
              color: Colors.white,
              padding: const EdgeInsets.all(10),
              child: Row(
                children: [
                  Expanded(child: Text(address)),
                  const Row(
                    children: [
                      Icon(Icons.location_searching_outlined,
                          color: Colors.blue),
                      SizedBox(width: 2),
                      Text(
                        '重新定位',
                        style: TextStyle(color: Colors.blue),
                      ),
                    ],
                  )
                ],
              ),
            ),
            const SizedBox(height: 10),
            const Row(
              children: [
                Text(
                  '附近社区',
                  style: TextStyle(color: Colors.grey),
                )
              ],
            ),
            const SizedBox(height: 10),
            ListView(
              shrinkWrap: true,
              physics: const NeverScrollableScrollPhysics(),
              children: nearbyCommunities.map((item){
                return  Container(
                        color: Colors.white,
                        padding: const EdgeInsets.all(10),
                        child: GestureDetector(
                          onTap: () {
                            Navigator.pushNamed(context, '/building_list',
                            arguments: {'point':item['name']});
                          },
                          child: Row(children: [
                          Expanded(child: Text(item['name'])),
                          const Row(children: [
                            Icon(Icons.arrow_forward_ios,
                                size: 16, color: Colors.black),
                          ])
                        ]),
                        )
                  );
              }).toList()
            )
          ],
        ));
  }
}